package com.atguigu.gmall.web.controller;


//import com.atguigu.gmall.common.result.Result;
//import com.atguigu.gmall.feign.search.SearchFeignClient;
//import com.atguigu.gmall.search.vo.SearchParamVo;
//import com.atguigu.gmall.search.vo.SearchResponseVo;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.feign.search.SearchFeignClient;
import com.atguigu.gmall.search.vo.SearchParamVo;
import com.atguigu.gmall.search.vo.SearchResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SearchController {


    @Autowired
    SearchFeignClient searchFeignClient;

    /**
     * 未来检索可能用到哪些参数
     * 发给list.html的请求会发送以下这么多参数
     * 分类入口\模糊搜索：
     * 一级分类：category1Id=2
     * 二级分类：category2Id=13
     * 三级分类：category3Id=61
     * 关键字：keyword=小米
     * <p>
     * 品牌检索：trademark=1:小米
     * 属性检索：props=23:8G:运行内存 & props=24:256G:机身内存
     * 排序条件：order=1:asc   【1：综合排序， 2：价格排序】
     * 页码条件：pageNo=2
     * <p>
     * <p>
     * GET请求所有参数默认都在url?后面。 查询字符串； k=v&k=v
     * POST请求所有参数（如果表单）。会把post的表单数据放在请求体。k=v&k=v
     * <p>
     * 接请求：
     * 请求首行：http://localhost:8000/a/b/{id}?id=1&ha=2&k=v...
     * 请求头：
     * 请求体： post的数据都在体中
     *
     * @return
     * @RequestParam： 获取查询字符串/请求体位置的k=v；
     * @PathVariable: ?以前，端口号以后，叫路径。获取路径上的
     * @RequestBody： 获取请求体 非k=v 的自定义数据（json，文件流...）
     * @RequestHeader: 获取请求头的数据。
     * <p>
     * 直接写         SearchParamVo paramVo：获取查询字符串/请求体中 k=v  的东西封装到对象
     * @RequestBody SearchParamVo paramVo：获取请求体中 json等自定义数据的东西封装到对象
     */
    @GetMapping("/list.html")
    public String searchListPage(
            SearchParamVo paramVo,
            Model model
    ) {

        //TODO 交给检索服务
        Result<SearchResponseVo> search = searchFeignClient.search(paramVo);
        SearchResponseVo searchData = search.getData();

        model.addAttribute("searchParam", searchData.getSearchParam());
        model.addAttribute("trademarkParam", searchData.getTrademarkParam());
        model.addAttribute("trademarkList", searchData.getTrademarkList());
        model.addAttribute("propsParamList", searchData.getPropsParamList());
        model.addAttribute("attrsList", searchData.getAttrsList());
        model.addAttribute("orderMap", searchData.getOrderMap());
        model.addAttribute("goodsList", searchData.getGoodsList());
        model.addAttribute("pageNo", searchData.getPageNo());
        model.addAttribute("urlParam", searchData.getUrlParam());
        model.addAttribute("totalPages", searchData.getTotalPages());
        return "list/index";
    }
}
